public class MyArrayList {
    //存储上场的球员号码
    static Object[] a = null;
    //size场上球员的个数
    static int size = 0;

    //初始容量的线性列表用来存储球员号码，可以有很多个大于等于size
    public static void init(int initialCapacity) {
        a = new Object[initialCapacity];
    }
    //size用来存储上场球员个数，安排5个球员上场,具体号码应该在主方法中传入的
    public static void add(Object Nm){
        //把传进来的参数赋值给数组索引对应的元素，[1,2,3,4,5]
        a[size]=Nm;
        size++;
    }

    //打印数组元素，打印风格[1,2,3,4,5]
    public static void print() {
        if(a==null){
            System.out.println(a);
            return;
        }else if(size==0){
            System.out.println("[]");
            return;
        }
        //把所有元素变成字符串中并打印，这时数组中的”，“【】，也算在字符串打印中，影响可变字符串的长度，因为Stringbuffer的实现原理时char数组
        StringBuffer sb =new StringBuffer(size*2+1);
        sb.append("[");
        //为什么这个【在char数组遍历的外边，遍历char数组从第一个元素开始
        for(int index=0;index<size;index++){
            sb.append(a[index]);
            //判断是不是最后一个元素,如果不是，需要在每个元素后面加逗号，否则加]
            if(index!=size-1){
                sb.append(",");
            }else{
                sb.append("]");
            }
        }
        System.out.println(sb.toString());
        }
    //查询指定位置的号码是多少，查询索引为2的号码
    private static Object get(int index) {
        return a [index];
        }
        //跟据号码查询索引值，4号球衣的索引位置
        public static int geterIndex(Object I) {
        //Integer用==是有范围限制的，所以建议用equals方法
            for (int i = 0; i < size; i++) {
                if (I.equals(a[i])) {
                    return i;
                }
            }

            return -1;
            //这个是不相等就返回0，相当于自已定义的错误码
        }
        //替换场上索引位置为2的球员号码，替换成33
        private static void set(int index,Object I) {
            a[index]=I;
        }
        //替换号码为5的球员，替换后为55
        private static void replace(Object oldI,Object newI){
        //for(int index=0;index<size;index++){
            //if(a[index].equals(oldI)){
                //a[index]=newI;
            //}
        //}
            int index=geterIndex(oldI);
            if(index>=0){
                set(index,newI);
            }

        }
        //删除索引位置为1的球员,有三个要点：1删除该元素后，后面的元素要向前移动，2.把最后一个元素设置成null,3；数组长度减一
        private static void delete(int i) {
        //遍历应该从这个元素后面的元素开始遍历
        /*for(int index=i;index<size-1;index++){
            if(index==i){
                a[index]=a[index+1];}
                //这样赋值为null为了释放空间
                a[size-1]=null;
                size--;



        }
        }*/
            for(int index=i;index<size-1;index++){

                a[index]=a[index+1];}
            //这样赋值为null为了释放空间
            a[size-1]=null;
            size--;}
        public static void main(String[] args) {
        print();
        init(5);
        print();
        add(1);
        add(2);
        add(3);
        add(4);
        add(5);
        print();
        Object num=get(2);
        System.out.println(num);
        int index=geterIndex(4);
        System.out.println(index);
        set (2,33);
        print();
        replace(5,55);
        print();
        delete(1);
        print();



    }


}
